import { verifyToken } from "./../utils/jwt.ts";  // 导入 JWT 验证函数
import { Context, Next } from "https://deno.land/x/oak@v12.6.0/mod.ts";

// 创建一个验证 JWT 的中间件
export async function authMiddleware(ctx: Context, next: Next) {
  // 跳过注册和登录接口，不进行 token 验证
  if (ctx.request.url.pathname.startsWith("/login") || ctx.request.url.pathname.startsWith("/register")) {
    await next();
    return;
  }

  const authHeader = ctx.request.headers.get("Authorization");

  // 如果没有 token, 返回未授权错误
  if (!authHeader || !authHeader.startsWith("Bearer ")) {
    ctx.response.status = 401;
    ctx.response.body = { message: "Authorization token is missing or invalid" };
    return;
  }

  // 提取 token
  const token = authHeader.replace("Bearer ", "");

  try {
    // 验证 token
    const payload = await verifyToken(token);
    // 将用户信息附加到 ctx.state 中，以便后续处理
    ctx.state.user = payload;
    await next();
  } catch (error) {
    // token 验证失败
    ctx.response.status = 401;
    ctx.response.body = { message: "Invalid or expired token" };
  }
}
